package com.tianya.common.lock;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @program: platform
 * @description
 * @author: tianya
 * @create: 2020-08-11 22:04
 **/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lock {

    /**
     * 锁的key
     * @return
     */
    String key();

    /**
     * 获取锁的最大尝试时间（单位{@code unit})
     * 该值大于o使用locker.tryLock 方法加锁，否则使用locker.lock 方法
     * @return
     */
    long waitTime() default 0;

    /**
     * 加锁的实践（单位{@code unit}）超过这个时间后锁便自动解锁
     * 如果leaseTime为-1 ，则保持锁定直到显示解锁
     * @return
     */
    long leaseTime() default -1;

    /**
     * 参数的实践单位，默认为秒
     * @return
     */
    TimeUnit unit() default TimeUnit.SECONDS;

    /**
     * 是否公平锁
     *
     * @return
     */
    boolean isFair() default false;
}
